/**
 * @file display.h
 * @brief 显示相关功能的头文件
 * @details 该头文件定义了与控制台显示相关的函数声明，包括控制台初始化、界面重置、标题显示、菜单显示、节气及节日信息显示等功能，用于实现超级万年历的用户界面展示。
 */

#ifndef __DISPLAY_H__
#define __DISPLAY_H__


/**
 * @brief 初始化控制台
 * @details 该函数用于初始化控制台界面，包括清屏、设置控制台字体和颜色等操作，为后续的界面显示做准备。
 * @return void
 */
void InitConsole();

/**
 * @brief 重置控制台界面
 * @details 该函数用于将控制台界面恢复到初始状态，重置颜色和字体设置，并清屏。
 * @return void
 */
void TermConsole();

/**
 * @brief 显示万年历标题
 * @details 该函数用于在控制台显示超级万年历的标题信息，包括程序名称、版本支持范围等内容，并提示用户程序运行相关信息。
 * @return void
 */
void ShowTitle();

/**
 * @brief 显示万年历主菜单
 * @details 该函数用于在控制台显示万年历的主菜单，包括当前时间显示、菜单选项（如公历查询农历、农历查询公历等）以及输入提示等内容，并且通过动态效果展示菜单边框，使用不同颜色突出显示菜单选项。
 * @return void
 */
void ShowMenu();

/**
 * @brief 显示指定公历日期附近的节气信息
 * @param gre_date 输入的公历日期结构体，用于确定要查询节气信息的时间范围。
 * @details 该函数根据输入的公历日期，计算并显示该日期所在月份附近的两个节气信息，包括节气名称、交节日期和时间。
 * @return void
 */
void ShowNearJieqi(GREDATE gre_date);

/**
 * @brief 显示指定年份的二十四节气信息
 * @param year 年份，用于确定要显示节气信息的年份。
 * @details 该函数遍历指定年份的二十四节气，获取每个节气的交节日期和时间，并将其转换为农历日期，然后在控制台显示节气名称、交节日期、交节时间、农历日期以及星期等信息。
 * @return void
 */
void ShowSolarTerms(int year);

/**
 * @brief 显示指定月份的公历节日
 * @param month 月份，用于确定要显示公历节日的月份。
 * @details 该函数根据输入的月份，在控制台显示该月份中包含的公历节日名称及相关信息。
 * @return void
 */
void ShowHoliday(int month);

/**
 * @brief 显示所有农历节日
 * @details 该函数在控制台显示常见的农历节日名称及相关信息，如春节、元宵节等。
 * @return void
 */
void ShowLunarHoliday();

/**
 * @brief 显示农历日期信息，可选择是否显示节气
 * @param lunar_date 输入的农历日期结构体，包含农历日期相关信息。
 * @param gre_date 对应的公历日期结构体，用于辅助显示相关信息。
 * @param show_jieqi 布尔值，true表示显示节气信息，false表示不显示。
 * @details 该函数根据输入的农历日期和公历日期，在控制台显示农历日期的详细信息，包括农历年份、月份、日期、大小月、是否为闰月等信息，若 `show_jieqi` 为true，还会根据公历日期判断并显示相关节气信息。
 * @return void
 */
void ShowLunarDate(LUNARDATE lunar_date ,GREDATE gre_date,bool show_jieqi);

/**
 * @brief 显示公历日期信息
 * @param gre_date 输入的公历日期结构体，包含要显示的公历日期信息。
 * @details 该函数根据输入的公历日期，计算并在控制台显示公历日期的具体信息，包括年、月、日以及对应的星期。
 * @return void
 */
void ShowGreDate(GREDATE gre_date);

#endif